package algo3.modelo.partes;
import java.util.ArrayList;

import algo3.modelo.IPosicionable;
import algo3.modelo.Posicion;
import algo3.modelo.armas.Arma;
import algo3.modelo.armas.Danio;

public class ParteBarco implements IPosicionable {

	protected static final String destruida ="DESTRUIDA";
	protected static final String funcionando = "FUNCIONANDO";
	private Posicion posicion;
	protected int durabilidad = 1;
	protected ArrayList<Class<? extends Arma>> invulnerabilidades =  new ArrayList<Class<? extends Arma>>();
	private String estado = funcionando;

	public ParteBarco(){
		this.posicion = new Posicion(0, 0);
	}
	
	public ParteBarco(Posicion posicion){
		this.posicion = posicion;
	}

	public Posicion getPosicion() {		
		return this.posicion;
	}

	public void setPosicion(Posicion posicion) {
		this.posicion = posicion;
	}
	
	public void destruirParte (){
		this.estado = destruida;
	}
	
	public String getEstado(){
		return estado;
	}
	
	private void disminuirDurabilidad(){
		this.durabilidad = durabilidad - 1;
		if(durabilidad == 0){
			this.destruirParte();
		}
	}
	
	public int getDurabilidad(){
		return durabilidad;
	}

	public void recibirDanio(Danio danio){
		if (!danio.getPosicion().equals(this.posicion)){
			return;
		}

		boolean invulnerable = false;
		for(Class<? extends Arma> tipoDeArma : this.invulnerabilidades){
			if (tipoDeArma.isAssignableFrom(danio.getTipoDeArma())){
				invulnerable = true;
				break;
			}
		}
		if (!invulnerable){
			this.disminuirDurabilidad();
		}
		
	}
}
